Some computer programs are designed in such a way that they are difficult to integrate or interface with other software systems. This can be a particular problem with older computer programs often referred to as legacy programs. Programs can be difficult to integrate because of close coupling between the processing or application logic and the presentation or display logic of the program. This may result from the application and display logic being provided by a single program component. In other words, the program may be designed in such a way that is difficult to separate the user interface elements, in the form of display windows with data or command input and data output, from the data processing logic that is driven by the inputs to provide the relevant outputs.
One way of interfacing with such programs is via the original or existing user interface of the program using known methods such as screen scraping or via translation systems that translate all inputs and outputs of the program to provide for its integration into other software systems. Another way of interfacing such programs is to translate the program code into a suitable programming language so that it can be re-engineered for integration into other software systems. Such interfacing techniques are problematic in that they are time consuming, error prone and thus expensive. Furthermore, users of legacy programs may no longer hold the original code for an application. Legacy programs commonly sit at the core of a users organization or business and thus users may be reluctant to risk any change to such important systems.